import datetime
import os.path

import pandas as pd
import easyquotation,random
from tqdm import tqdm
quotation = easyquotation.use('tencent')

def tencentQuo(OQ代码,价格类型):
    # 获取委托价格
    if ".SH" in OQ代码:
        腾讯代码="sh"+OQ代码[0:6]
    elif ".SZ" in OQ代码:
        腾讯代码="sz"+OQ代码[0:6]
    try:
        价格=quotation.real(腾讯代码)[腾讯代码[2:8]][价格类型]
    except:
        价格=0.01
    return 价格

是否人工干预=False
单个文件=True
if 单个文件==True:
    T0明细=pd.read_excel(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\策略汇总明细.xlsx")
else:
    T0明细=pd.DataFrame(columns=['状态','代码', '名称', '策略使用量','买入数量', '买入均价', '卖出数量', '卖出均价',  '预估已实现盈亏', '敞口数量', '平仓方向', '单边暴露率',  '异常提示'])
    for filename in os.listdir(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\T0"):
        # print(f"合并文件{filename}")
        T0明细One=pd.read_excel(os.path.join(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\T0",filename))
        # print(T0明细One)
        T0明细=pd.concat([T0明细,T0明细One],axis=0)
        print(T0明细)
    T0明细.to_excel(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\策略汇总明细.xlsx")
    print(T0明细)
手工补单=pd.read_excel(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\委托查询.xlsx")
# 根据组合交易过滤
实际手工补单=手工补单[ 手工补单["策略"]=="BO5"]

#人工去除
# 实际手工补单=手工补单


T0明细["最新价"]=0
T0明细["成交额"]=0
T0明细["换手率"]=0
T0明细["市值"]=0
T0明细["总盈亏"]=0
T0明细["敞口浮动盈亏"]=0
T0明细["手工买入成交金额"]=0
T0明细["手工买入成交数量"]=0
T0明细["手工买入成交均价"]=0
T0明细["手工卖出成交金额"]=0
T0明细["手工卖出成交数量"]=0
T0明细["手工卖出成交均价"]=0
T0明细["累计净敞口"]=0
T0明细["T0&手工总盈亏"]=0
T0明细["T0&手工敞口盈亏"]=0
if 是否人工干预 == False:
    # print(datetime.datetime.now())
    for index, row in tqdm(T0明细.iterrows(), total=T0明细.shape[0]):
    # for index, row in T0明细.iterrows():
        最新价=tencentQuo(row["代码"],"now")
        成交额=tencentQuo(row["代码"],"价格/成交量(手)/成交额").split("/")[2]
        换手率=tencentQuo(row["代码"],"turnover")
        T0明细.loc[index,"最新价"]=最新价
        卖出数量=T0明细.loc[index,"卖出数量"]
        卖出均价=T0明细.loc[index,"卖出均价"]
        买入数量=T0明细.loc[index,"买入数量"]
        买入均价=T0明细.loc[index,"买入均价"]
        策略使用量=T0明细.loc[index,"策略使用量"]
        敞口数量=T0明细.loc[index,"敞口数量"]
        if T0明细.loc[index,"敞口数量"]==0:
            T0明细.loc[index,"总盈亏"]=T0明细.loc[index,"预估已实现盈亏"]
            T0明细.loc[index,"敞口浮动盈亏"]=0
            T0明细.loc[index,"市值"]=最新价*策略使用量
        elif T0明细.loc[index,"平仓方向"]=="买入":
            T0明细.loc[index,"总盈亏"]=卖出数量*卖出均价-买入数量*买入均价-敞口数量*最新价
            T0明细.loc[index,"敞口浮动盈亏"]=敞口数量*(卖出均价-最新价)
            T0明细.loc[index,"市值"]=最新价*策略使用量
        elif T0明细.loc[index,"平仓方向"]=="卖出":
            T0明细.loc[index,"总盈亏"]=卖出数量*卖出均价-买入数量*买入均价+敞口数量*最新价
            T0明细.loc[index,"敞口浮动盈亏"]=敞口数量*(最新价-买入均价)
            T0明细.loc[index,"市值"]=最新价*策略使用量
    T0明细.to_excel(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\敞口浮动盈亏.xlsx", index=False)
elif 是否人工干预 == True:
    for index, row in tqdm(T0明细.iterrows(), total=T0明细.shape[0]):
        最新价=tencentQuo(row["代码"],"now")
        成交额=tencentQuo(row["代码"],"价格/成交量(手)/成交额").split("/")[2]
        换手率=tencentQuo(row["代码"],"turnover")
        T0明细.loc[index,"最新价"]= 最新价
        i=i+1
        print(f"计算第{i}条")
        代码买入委托记录=实际手工补单[(实际手工补单["证券代码"]==row["代码"])&(实际手工补单["交易类型"]=="买入")]
        手工买入成交金额=(代码买入委托记录["成交均价"]*代码买入委托记录["成交数量"]).sum()
        手工买入成交数量=(代码买入委托记录["成交数量"]).sum()
        手工买入成交均价=round(T0明细.loc[index,"手工买入成交金额"]/手工买入成交数量,4)
        代码卖出委托记录=实际手工补单[(实际手工补单["证券代码"]==row["代码"])&(实际手工补单["交易类型"]=="卖出")]
        手工卖出成交金额=(代码卖出委托记录["成交均价"]*代码卖出委托记录["成交数量"]).sum()
        手工卖出成交数量=(代码卖出委托记录["成交数量"]).sum()
        手工卖出成交均价=round(手工卖出成交金额/手工卖出成交数量,4)
        卖出数量=T0明细.loc[index,"卖出数量"]
        卖出均价=T0明细.loc[index,"卖出均价"]
        买入数量=T0明细.loc[index,"买入数量"]
        买入均价=T0明细.loc[index,"买入均价"]
        累计净敞口= 卖出数量+ 手工卖出成交数量-买入数量- 手工买入成交数量
        if T0明细.loc[index,"累计净敞口"]==0:
            T0明细.loc[index,"T0&手工总盈亏"]=卖出数量*卖出均价+ 手工卖出成交金额-买入数量*买入均价-手工买入成交金额
            T0明细.loc[index,"T0&手工敞口盈亏"]=0
        elif T0明细.loc[index,"累计净敞口"]>0:
            汇总卖出均价=round((卖出数量*卖出均价+手工卖出成交金额)/(卖出数量+手工卖出成交数量),4)
            汇总买入均价=round((买入数量*买入均价+手工买入成交金额)/(买入数量+手工买入成交数量),4)
            汇总买入数量=买入数量+手工买入成交数量
            汇总卖出数量=卖出数量+手工卖出成交数量
            T0明细.loc[index,"T0&手工总盈亏"]=(汇总卖出均价-汇总买入均价)*汇总买入数量
            T0明细.loc[index,"T0&手工敞口盈亏"]=(汇总卖出均价-汇总最新价)*(汇总卖出数量-汇总买入数量)
        elif T0明细.loc[index,"累计净敞口"]<0:
            汇总卖出均价=round((卖出数量*卖出均价+手工卖出成交金额)/(卖出数量+手工卖出成交数量),4)
            汇总买入均价=round((买入数量*买入均价+手工买入成交金额)/(买入数量+手工买入成交数量),4)
            汇总买入数量=买入数量+手工买入成交数量
            汇总卖出数量=卖出数量+手工卖出成交数量
            T0明细.loc[index,"T0&手工总盈亏"]=(汇总卖出均价-汇总买入均价)*汇总卖出数量
            T0明细.loc[index,"T0&手工敞口盈亏"]=(汇总最新价-汇总买入均价)*(汇总买入数量-汇总卖出数量)
    T0明细.to_excel(r"C:\Users\AXZQ\Desktop\AUTO\t0-FL\手工平敞口盈亏.xlsx", index=False)
print(datetime.datetime.now())
print("已完成")
